package br.com.petsis.funcionalidades.manterAgenda;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage.Severity;
import org.jboss.seam.security.Identity;

import br.com.petsis.entity.Agenda;
import br.com.petsis.entity.Empresa;
import br.com.petsis.entity.Usuario;
import br.com.petsis.funcionalidades.auditoria.AuditoriaController;
import br.com.petsis.utilitarios.UtilDate;
import br.com.petsis.utilitarios.UtilMail;

@Name("manterAgendaController")
@Scope(ScopeType.SESSION)
@AutoCreate
//@Restrict(value="#{identity.hasRole('Administrador')}")
public class ManterAgendaController {
	
	private boolean exibirPopup;
	
	private boolean exibirPopupAdiar;
	    
	@In(required=false) 
	Identity identity;
	
	@In(create=true, required=false)
	private EntityManager entityManager;
	
	private Boolean pollAtivo;
	
	private Integer width;
	
	private Integer height;
	
	private Integer hora;
	
	private Integer minuto;
	
	private List<Agenda> agendas;
	
	private Agenda agenda;
	
	private Agenda agendaEdicao;
	
	private List<SelectItem> listaTiposVisualizacao;
	
	private List<SelectItem> listaTiposAdiar;
	
	private boolean selecionadoTodos;
	
	private List<Agenda> listaAgendas;
	
	@Out(required = false)
	private Agenda agendaSelecionada;
	
	private Integer idTipoSelecionado;
	
	private String horaEdicao;
	
	private String minutoEdicao;
	
	private Integer idTipoAdiarSelecionado;
	
	@In(required=false)
	private Usuario usuarioLogado;
	
	@In(required=false)
	private Empresa empresaSessao;
	
    public Integer getIdTipoAdiarSelecionado() {
		return idTipoAdiarSelecionado;
	}

	public void setIdTipoAdiarSelecionado(Integer idTipoAdiarSelecionado) {
		this.idTipoAdiarSelecionado = idTipoAdiarSelecionado;
	}

	public List<SelectItem> getListaTiposAdiar() {
		if (listaTiposAdiar == null) {
			listaTiposAdiar = new ArrayList<SelectItem>();
			listaTiposAdiar.add(new SelectItem(1, "1 minuto"));
			listaTiposAdiar.add(new SelectItem(2, "5 minutos"));
			listaTiposAdiar.add(new SelectItem(3, "10 minutos"));
			listaTiposAdiar.add(new SelectItem(4, "30 minutos"));
			listaTiposAdiar.add(new SelectItem(5, "1 hora"));
			listaTiposAdiar.add(new SelectItem(6, "1 dia"));
		}
		return listaTiposAdiar;
	}

	public void setListaTiposAdiar(List<SelectItem> listaTiposAdiar) {
		this.listaTiposAdiar = listaTiposAdiar;
	}

	public boolean isExibirPopupAdiar() {
		return exibirPopupAdiar;
	}

	public void setExibirPopupAdiar(boolean exibirPopupAdiar) {
		this.exibirPopupAdiar = exibirPopupAdiar;
	}

	public String getHoraEdicao() {
		return horaEdicao;
	}

	public void setHoraEdicao(String horaEdicao) {
		this.horaEdicao = horaEdicao;
	}

	public String getMinutoEdicao() {
		return minutoEdicao;
	}

	public void setMinutoEdicao(String minutoEdicao) {
		this.minutoEdicao = minutoEdicao;
	}

	public Integer getIdTipoSelecionado() {
		return idTipoSelecionado;
	}

	public void setIdTipoSelecionado(Integer idTipoSelecionado) {
		this.idTipoSelecionado = idTipoSelecionado;
	}

	public List<Agenda> getListaAgendas() {
		if (listaAgendas == null) {
			listaAgendas = new ArrayList<Agenda>();
		}
		return listaAgendas;
	}

	public void setListaAgendas(List<Agenda> listaAgendas) {
		this.listaAgendas = listaAgendas;
	}

	public Agenda getAgendaEdicao() {
		if (agendaEdicao == null) {
			agendaEdicao = new Agenda();
		}
		return agendaEdicao;
	}

	public void setAgendaEdicao(Agenda agendaEdicao) {
		this.agendaEdicao = agendaEdicao;
	}

	public List<SelectItem> getListaTiposVisualizacao() {
		if (listaTiposVisualizacao == null) {
			listaTiposVisualizacao = new ArrayList<SelectItem>();
			listaTiposVisualizacao.add(new SelectItem(1,"HOJE"));
			listaTiposVisualizacao.add(new SelectItem(2,"SEMANA"));
			listaTiposVisualizacao.add(new SelectItem(3,"MÊS"));
			listaTiposVisualizacao.add(new SelectItem(4,"TODOS"));
		}

		return listaTiposVisualizacao;
	}

	public void setListaTiposVisualizacao(List<SelectItem> listaTiposVisualizacao) {
		this.listaTiposVisualizacao = listaTiposVisualizacao;
	}

	public boolean isSelecionadoTodos() {
		return selecionadoTodos;
	}

	public void setSelecionadoTodos(boolean selecionadoTodos) {
		this.selecionadoTodos = selecionadoTodos;
	}

	public Agenda getAgenda() {
		if (agenda == null) {
			agenda = new Agenda();
		}
		return agenda;
	}

	public void setAgenda(Agenda agenda) {
		this.agenda = agenda;
	}

	public List<Agenda> getAgendas() {
		if (agendas == null) {
			agendas = new ArrayList<Agenda>();
		}
		return agendas;
	}

	public void setAgendas(List<Agenda> agendas) {
		this.agendas = agendas;
	}

	public Integer getWidth() {
		return width;
	}

	public void setWidth(Integer width) {
		this.width = width;
	}

	public Integer getHeight() {
		return height;
	}

	public void setHeight(Integer height) {
		this.height = height;
	}

	public Boolean getPollAtivo() {
		if (pollAtivo == null) {
			pollAtivo = true;
		}
		return pollAtivo;
	}

	public void setPollAtivo(boolean pollAtivo) {
		this.pollAtivo = pollAtivo;
	}

	public boolean isExibirPopup() {
    	if(verificaExibePopupAlerta() && identity != null && identity.isLoggedIn()){
    		exibirPopup = true;
    		pollAtivo = false;
    	}
		return exibirPopup;
	}

	public void setExibirPopup(boolean exibirPopup) {
		this.exibirPopup = exibirPopup;
	}
	
	public void onLoad(){
		if(agendaSelecionada != null){
			agendaEdicao = agendaSelecionada;
			if(UtilDate.getHora(agendaEdicao.getDtaAgenda()) < 10){
				setHoraEdicao("0"+UtilDate.getHora(agendaEdicao.getDtaAgenda()).toString());
			}else{
				setHoraEdicao(UtilDate.getHora(agendaEdicao.getDtaAgenda()).toString());
			}
			if(UtilDate.getMinuto(agendaEdicao.getDtaAgenda()) < 10){
				setMinutoEdicao("0"+UtilDate.getMinuto(agendaEdicao.getDtaAgenda()).toString());
			}else{
				setMinutoEdicao(UtilDate.getMinuto(agendaEdicao.getDtaAgenda()).toString());
			}
		}else{
			agendaEdicao = new Agenda();
			setMinutoEdicao(null);
			setHoraEdicao(null);
		}
	}
	
	public void onLoadList(){
		setIdTipoSelecionado(1);
		if(empresaSessao != null){
			if(usuarioLogado != null && usuarioLogado.getCliente() != null){
				listaAgendas = entityManager.createQuery("select a from Agenda a where a.empresa.idEmpresa = :idEmpresa and DATE(a.dtaAgenda) = DATE(:data) and a.cliente.idCliente = :idCliente order by a.dtaAgenda")
					.setParameter("data", new Date())
					.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
					.setParameter("idCliente", usuarioLogado.getCliente().getIdCliente())
					.getResultList();
			}else{
				listaAgendas = entityManager.createQuery("select a from Agenda a where a.empresa.idEmpresa = :idEmpresa and DATE(a.dtaAgenda) = DATE(:data) order by a.dtaAgenda")
					.setParameter("data", new Date())
					.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
					.getResultList();
			}
		}
	}
	
	public boolean verificaExibePopupAlerta(){
    	Calendar dataAtual = Calendar.getInstance();
    	dataAtual.setTime(new Date());
    	Integer horaAtual = dataAtual.get(Calendar.HOUR_OF_DAY);
    	Integer minutoAtual = dataAtual.get(Calendar.MINUTE);
    	Integer segundoAtual = dataAtual.get(Calendar.SECOND);
    	
    	if(empresaSessao == null){
    		return false;
    	}
    	
    	/*List<Agenda> agendasTemp = entityManager.createQuery("select a from Agenda a where a.empresa.idEmpresa = :idEmpresa and a.flgAvisado is false and DATE(a.dtaAgenda) = DATE(:data) and HOUR(a.dtaAgenda) = :hora and MINUTE(a.dtaAgenda) = :minuto")
    		.setParameter("data", dataAtual.getTime())
    		.setParameter("hora", horaAtual)
    		.setParameter("minuto", minutoAtual)
    		.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
    		.getResultList();*/
    	
    	List<Object[]> agendasTemp2 = entityManager.createNativeQuery("select a.id_agenda,a.dta_agenda from agenda a where a.id_empresa = :idEmpresa and a.flg_avisado is false and DATE(a.dta_agenda) = DATE(:data) and HOUR(a.dta_agenda) = :hora and MINUTE(a.dta_agenda) = :minuto")
			.setParameter("data", dataAtual.getTime())
			.setParameter("hora", horaAtual)
			.setParameter("minuto", minutoAtual)
			.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
			.getResultList(); 
    	
    	if(agendasTemp2 != null && agendasTemp2.size() > 0){
    		agendas = new ArrayList<Agenda>();
    		for(Object[] o : agendasTemp2){
    			Calendar dataAgenda = Calendar.getInstance();
    			dataAgenda.setTime((Date)o[1]);
    			hora = dataAgenda.get(Calendar.HOUR_OF_DAY);
    			minuto = dataAgenda.get(Calendar.MINUTE);
    			if(hora.equals(horaAtual) && minuto.equals(minutoAtual)){
    				agendas.add(entityManager.find(Agenda.class, Integer.parseInt(o[0].toString())));
    				return true;
    			}else{
    				return false;
    			}
    		}
    	}
    	
    	agendasTemp2 = null;
    	/*for(Agenda a : agendasTemp){
    		Calendar dataAgenda = Calendar.getInstance();
    		dataAgenda.setTime(a.getDtaAgenda());
    		hora = dataAgenda.get(Calendar.HOUR_OF_DAY);
    		minuto = dataAgenda.get(Calendar.MINUTE);
    		if(hora.equals(horaAtual) && minuto.equals(minutoAtual)){
//    			System.out.println("Hora: "+horaAtual+":"+minutoAtual+":"+segundoAtual+" - EXIBIR POPUP ALERTA. POSIÇÃO: "+getWidth()+"x"+getHeight());
    			agendas = agendasTemp;
    			return true;
    		}else{
//    			System.out.println("Hora: "+horaAtual+":"+minutoAtual+":"+segundoAtual+" - NÃO EXIBIR POPUP ALERTA");
    			return false;
    		}
    	}*/
    	return false;
    }

    public void fecharPopupAlerta(){
    	setExibirPopup(false);
    	setPollAtivo(true);
    	for(Agenda a : getAgendas()){
    		if(a.getFlgRecursivo()){
    			a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
    		}else{
    			a.setFlgAvisado(true);
    		}
    		entityManager.merge(a);
    	}
    	entityManager.flush();
    }
    
    public void selecionaTodos(){
    	for(Agenda a : getListaAgendas()){
    		a.setSelecionado(isSelecionadoTodos());
    	}
    }
    
    public void excluir(){
    	List<Agenda> listaRemocao = new ArrayList<Agenda>();
    	for(Agenda a : getListaAgendas()){
    		if(a.isSelecionado()){
    			listaRemocao.add(a);
    			entityManager.remove(a);
    		}
    	}
    	entityManager.flush();
    	getListaAgendas().removeAll(listaRemocao);
    	setSelecionadoTodos(false);
    	FacesMessages.instance().add(Severity.INFO,"Agenda(s) exclu�da(s) com sucesso.");
    }
    
    public String salvar(){
    	if(empresaSessao == null){
    		FacesMessages.instance().add(Severity.ERROR, "Somente empresas podem salvar agendas.");
    		return null;
    	}
    	if(usuarioLogado != null && usuarioLogado.getCliente() != null){
    		getAgendaEdicao().setCliente(usuarioLogado.getCliente());
    		getAgendaEdicao().setFlgRecursivo(false);
    	}
//    	if(getAgendaEdicao().getIdAgenda() == null)
		getAgendaEdicao().setFlgAvisado(false);
		getAgendaEdicao().setEmpresa(empresaSessao);
    	Calendar data = Calendar.getInstance();
    	data.setTime(getAgendaEdicao().getDtaAgenda());
    	data.set(Calendar.HOUR_OF_DAY, Integer.parseInt(getHoraEdicao()));
    	data.set(Calendar.MINUTE, Integer.parseInt(getMinutoEdicao()));
    	getAgendaEdicao().setDtaAgenda(data.getTime());
    	entityManager.merge(getAgendaEdicao());
    	entityManager.flush();
    	if(usuarioLogado.getCliente() != null){
    		FacesMessages.instance().add(Severity.INFO,"Compromisso agendado com sucesso. Entraremos em contato em breve para confirmar o serviço.");
    		enviarEmailNotificacao(usuarioLogado.getCliente().getDscEmail());
    		enviarEmailNotificacaoEmpresa();
    	}else if(usuarioLogado.getEmpresa() != null){
    		FacesMessages.instance().add(Severity.INFO,"Compromisso agendado com sucesso.");
    	}
    	setAgendaEdicao(null);
    	agendaSelecionada = null;
    	setHoraEdicao(null);
    	setMinutoEdicao(null);
    	return "voltar";
    }
    
    public void enviarEmailNotificacao(String destinatario){
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
    	StringBuilder texto = new StringBuilder();
    	texto.append("<center><img src=\"cid:image\"><br/>");
    	texto.append("<b>Atenção</b><br/>");
    	texto.append("Foi cadastrado/editado um agendamento.<br/><br/>Detalhes:<br/><table>");
    	texto.append("<tr><td><b>Cliente:</b></td><td> ");
    	texto.append(getAgendaEdicao().getCliente() != null ? getAgendaEdicao().getCliente().getDscNome() : null);
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Data de agendamento:</b></td><td> ");
    	texto.append(sdf.format(new Date()));
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Data da agenda:</b></td><td> ");
    	texto.append(sdf.format(getAgendaEdicao().getDtaAgenda()));
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Título:</b></td><td> ");
    	texto.append(getAgendaEdicao().getDscTitulo());
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Descrição:</b></td><td> ");
    	texto.append(getAgendaEdicao().getDscAgenda());
    	texto.append("</td></tr></table>");
    	texto.append("<br/><b><u>IMPORTANTE: Este agendamento não garante a execução do serviço.<br/> Entraremos em contato em breve para confirmar o seu agendamento.</u></b>");
    	texto.append("<br/><br/><br/>Sistema PetSis</center>");
    	
    	String assunto = "PETSIS: Agendamento cadastrado/editado. Compromisso em "+sdf.format(getAgendaEdicao().getDtaAgenda());
    	
    	try {
			UtilMail.enviarEmailAssincrono(texto.toString(), destinatario, assunto);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
    }
    
    public void enviarEmailNotificacaoEmpresa(){
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
    	StringBuilder texto = new StringBuilder();
    	texto.append("<center><img src=\"cid:image\"><br/>");
    	texto.append("<b>Atenção</b><br/>");
    	texto.append("Foi cadastrado/editado um agendamento por cliente.<br/><br/>Detalhes:<br/><table>");
    	texto.append("<tr><td><b>Cliente:</b></td><td> ");
    	texto.append(getAgendaEdicao().getCliente() != null ? getAgendaEdicao().getCliente().getDscNome() : null);
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Data de agendamento:</b></td><td> ");
    	texto.append(sdf.format(new Date()));
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Data da agenda:</b></td><td> ");
    	texto.append(sdf.format(getAgendaEdicao().getDtaAgenda()));
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Título:</b></td><td> ");
    	texto.append(getAgendaEdicao().getDscTitulo());
    	texto.append("</td></tr>");
    	texto.append("<tr><td><b>Descrição:</b></td><td> ");
    	texto.append(getAgendaEdicao().getDscAgenda());
    	texto.append("</td></tr></table>");
    	texto.append("<br/><br/><br/>Sistema PetSis</center>");
    	
    	String assunto = "PETSIS: Agendamento cadastrado/editado. Compromisso em "+sdf.format(getAgendaEdicao().getDtaAgenda());
    	
    	try {
    		UtilMail.enviarEmailAssincrono(texto.toString(), empresaSessao.getDscEmail(), assunto);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	
    }
    
    public String excluir(Agenda agenda){
    	Agenda agendaSinc = entityManager.find(Agenda.class, agenda.getIdAgenda());
    	entityManager.remove(agendaSinc);
    	entityManager.flush();
    	setAgendaEdicao(null);
    	setHoraEdicao(null);
    	agendaSelecionada = null;
    	setMinutoEdicao(null);
    	FacesMessages.instance().add(Severity.INFO,"Compromisso excluído com sucesso.");
    	return "voltar";
    }
    
    public String voltar(){
    	agendaSelecionada = null;
    	agendaEdicao = null;
    	return "voltar";
    }
    
    public String editar(Agenda agenda){
    	agendaSelecionada = agenda;
    	return "novaAgenda";
    }
    
    public String visualizarAgendas(){
    	fecharPopupAlerta();
    	return "agendas";
    }
    
    public void atualizaListaAgendas(ValueChangeEvent evento){
    	if(empresaSessao == null){
    		return;
    	}
    	int tipo = (Integer)evento.getNewValue();
    	StringBuilder query  = new StringBuilder();
    	if(usuarioLogado != null && usuarioLogado.getCliente() != null){
    		query.append("select a from Agenda a where a.empresa.idEmpresa = :idEmpresa and a.cliente.idCliente = :idCliente ");
    	}else{
    		query.append("select a from Agenda a where a.empresa.idEmpresa = :idEmpresa and a.idAgenda is not null ");
    	}
    	Query qryResult = null;
    	
    	switch (tipo) {
		case 1:
			query.append(" and DATE(a.dtaAgenda) = DATE(:data) order by a.dtaAgenda");
			qryResult = entityManager.createQuery(query.toString());
			qryResult.setParameter("data", new Date());
			qryResult.setParameter("idEmpresa", empresaSessao.getIdEmpresa());
			/*listaAgendas = entityManager.createQuery("select a from Agenda a where DATE(a.dtaAgenda) = DATE(:data) order by a.dtaAgenda")
				.setParameter("data", new Date())
				.getResultList();*/
			break;
			
		case 2:
			query.append(" and DATE(a.dtaAgenda) >= DATE(:hoje) and DATE(a.dtaAgenda) <= DATE(:semana) order by a.dtaAgenda");
			qryResult = entityManager.createQuery(query.toString());
			qryResult.setParameter("hoje", new Date());
			qryResult.setParameter("semana", UtilDate.getDataAcrescidaEmDias(new Date(), 7));
			/*listaAgendas = entityManager.createQuery("select a from Agenda a where DATE(a.dtaAgenda) >= DATE(:hoje) and DATE(a.dtaAgenda) <= DATE(:semana) order by a.dtaAgenda")
				.setParameter("hoje", new Date())
				.setParameter("semana", UtilDate.getDataAcrescidaEmDias(new Date(), 7))
				.getResultList();*/
			break;
			
		case 3:
			query.append(" and DATE(a.dtaAgenda) >= DATE(:hoje) and MONTH(a.dtaAgenda) = :mes order by a.dtaAgenda");
			qryResult = entityManager.createQuery(query.toString());
			qryResult.setParameter("hoje", new Date());
			qryResult.setParameter("mes", UtilDate.getMesInt(new Date()));
			
			/*listaAgendas = entityManager.createQuery("select a from Agenda a where DATE(a.dtaAgenda) >= DATE(:hoje) and MONTH(a.dtaAgenda) = :mes order by a.dtaAgenda")
				.setParameter("hoje", new Date())
				.setParameter("mes", UtilDate.getMesInt(new Date()))
				.getResultList();*/
			break;
			
		case 4:
			query.append(" and DATE(a.dtaAgenda) >= DATE(:hoje) order by a.dtaAgenda");
			qryResult = entityManager.createQuery(query.toString());
			qryResult.setParameter("hoje", new Date());
			
			/*listaAgendas = entityManager.createQuery("select a from Agenda a where DATE(a.dtaAgenda) >= DATE(:hoje) order by a.dtaAgenda")
				.setParameter("hoje", new Date())
				.getResultList();*/
			break;

		default:
			listaAgendas = new ArrayList<Agenda>();
			return;
		}
    	if(usuarioLogado != null && usuarioLogado.getCliente() != null){
    		qryResult.setParameter("idCliente", usuarioLogado.getCliente().getIdCliente());
    	}
    	qryResult.setParameter("idEmpresa", empresaSessao.getIdEmpresa());
    	listaAgendas = qryResult.getResultList();
    }

    public void inicializaPopupAdiar(){
    	setExibirPopupAdiar(true);
    }
    
    public void cancelarAdiar(){
    	fecharPopupAlerta();
    	setExibirPopupAdiar(false);
    }
    
    public void adiarAgendas(){
    	setExibirPopupAdiar(false);
//    	fecharPopupAlerta();
    	setExibirPopup(false);
    	setPollAtivo(true);
		onLoadList();
		switch (getIdTipoAdiarSelecionado()) {
		case 1:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 1));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 1));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;
			
		case 2:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 5));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 5));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;
			
		case 3:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 10));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 10));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;
			
		case 4:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 30));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmMinutos(a.getDtaAgenda(), 30));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;
			
		case 5:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmHoras(a.getDtaAgenda(), 1));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmHoras(a.getDtaAgenda(), 1));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;
			
		case 6:
			for(Agenda a : getAgendas()){
				if(a.getFlgRecursivo()){
					Agenda agendaNova = new Agenda(a);
					agendaNova.setFlgRecursivo(false);
					agendaNova.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), 1));
					agendaNova.setFlgAvisado(false);
					agendaNova.setFlgRecursivo(false);
					entityManager.merge(agendaNova);	

					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), a.getQtdDiasRecursao()));
					entityManager.merge(a);
				}else{
					a.setDtaAgenda(UtilDate.getDataAcrescidaEmDias(a.getDtaAgenda(), 1));
					a.setFlgAvisado(false);
				}
				entityManager.merge(a);
			}
			entityManager.flush();
			break;

		default:
			break;
		}
    }
    
    public void selecionaFlgRecursivoListener(ValueChangeEvent evento){
    	getAgendaEdicao().setFlgRecursivo((Boolean)evento.getNewValue());
    }
}
